﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

using Padelcenter.Common;
using Padelcenter.DataAccess;

namespace Padelcenter.BusinessLogic.Get
{
    
    public class GetPedido : IBusinessLogic
    {
        public GetPedido() { }

        public void Invoke()
        {
            Pedido_Select oPedidoSelect = new Pedido_Select();
            oPedidoSelect.Pedido = this.Pedido;

            this.Resultset = oPedidoSelect.Get();
        }

        public List<Pedido> PedidoList()
        {
            this.Invoke();

            List<Pedido> listaPedido = new List<Pedido>();

            DataTable dTable = new DataTable();
            dTable = this.Resultset.Tables[0];

            if (dTable.Rows.Count > 0)
            {
                Pedido oPedido;

                foreach (DataRow r in dTable.Rows)
                {
                    oPedido = new Pedido();
                    oPedido.IdPedido = Convert.ToInt32(r["idPedido"]);
                    oPedido.FechaAlta = Convert.ToDateTime(r["FechaAlta"]);

                    //Usuario
                    Usuario oUsuario        = new Usuario();
                    oUsuario.IdUsuario      = Convert.ToInt32(r["idUsuario"]);
                    GetUsuario oGetUsuario  = new GetUsuario();
                    oGetUsuario.Usuario     = oUsuario;
                    oPedido.Usuario         = oGetUsuario.UsuarioList()[0];

                    //EstadoPedido
                    EstadoPedido oEstadoPedido          = new EstadoPedido();
                    oEstadoPedido.IdEstadoPedido        = Convert.ToInt32(r["idEstadoPedido"]);
                    GetEstadoPedido oGetEstadoPedido    = new GetEstadoPedido();
                    oGetEstadoPedido.EstadoPedido       = oEstadoPedido;
                    oPedido.EstadoPedido                = oGetEstadoPedido.EstadoPedidoList()[0];

                    //MetodoPago
                    MetodoPago oMetodoPago          = new MetodoPago();
                    oMetodoPago.IdMetodoPago        = Convert.ToInt32(r["idMetodoPago"]);
                    GetMetodoPago oGetMetodoPago    = new GetMetodoPago();
                    oGetMetodoPago.MetodoPago       = oMetodoPago;
                    oPedido.MetodoPago              = oGetMetodoPago.MetodoPagoList()[0];
                    
                    //MetodoEnvio
                    MetodoEnvio oMetodoEnvio        = new MetodoEnvio();
                    oMetodoEnvio.IdMetodoEnvio      = Convert.ToInt32(r["idMetodoEnvio"]);
                    GetMetodoEnvio oGetMetodoEnvio  = new GetMetodoEnvio();
                    oGetMetodoEnvio.MetodoEnvio     = oMetodoEnvio;
                    oPedido.MetodoEnvio             = oGetMetodoEnvio.MetodoEnvioList()[0];

                    //Tarjeta
                    Tarjeta oTarjeta                = new Tarjeta();
                    oTarjeta.IdTarjeta              = Convert.ToInt32(r["idTarjeta"]);
                    GetTarjeta oGetTarjeta          = new GetTarjeta();
                    oGetTarjeta.Tarjeta             = oTarjeta;
                    oPedido.Tarjeta                 = oGetTarjeta.TarjetaList()[0];

                    oPedido.Direccion = r["Direccion"].ToString();
                    oPedido.Ciudad = r["Ciudad"].ToString();
                    oPedido.CodigoPostal = r["CodigoPostal"].ToString();
                    oPedido.Provincia = r["Provincia"].ToString();

                    //Pais
                    Pais oPais = new Pais();
                    oPais.IdPais = Convert.ToInt32(r["idPais"]);
                    GetPais oGetPais = new GetPais();
                    oGetPais.Pais = oPais;
                    oPedido.Pais = oGetPais.PaisList()[0];

                    oPedido.FechaFinalizacion = Convert.ToDateTime(r["FechaFinalizacion"]);

                    listaPedido.Add(oPedido);
                }
            }

            return listaPedido;
        }

        private DataSet _resultset;

        public DataSet Resultset
        {
            get { return _resultset; }
            set { _resultset = value; }
        }

        private Pedido _pedido;

        public Pedido Pedido
        {
            get { return _pedido; }
            set { _pedido = value; }
        }
    }
    
    public class GetPedidoProducto : IBusinessLogic
    {
        public GetPedidoProducto() { }

        public void Invoke()
        {
            PedidoProducto_Select oPedidoProductoSelect = new PedidoProducto_Select();
            oPedidoProductoSelect.PedidoProducto = this.PedidoProducto;

            this.Resultset = oPedidoProductoSelect.Get();
        }

        public List<PedidoProducto> PedidoProductoList()
        {
            this.Invoke();

            List<PedidoProducto> listaPedidoProducto = new List<PedidoProducto>();

            DataTable dTable = new DataTable();
            dTable = this.Resultset.Tables[0];

            if (dTable.Rows.Count > 0)
            {
                PedidoProducto oPedidoProducto;
                foreach (DataRow r in dTable.Rows)
                {
                    oPedidoProducto = new PedidoProducto();

                    oPedidoProducto.Cantidad = Convert.ToInt32(r["Cantidad"]);
                    oPedidoProducto.PrecioUnitario = Convert.ToDouble(r["PrecioUnitario"]);
                    oPedidoProducto.Fecha = Convert.ToDateTime(r["Fecha"]);

                    //Pedido
                    Pedido oPedido = new Pedido();
                    oPedido.IdPedido = Convert.ToInt32(r["idPedido"]);
                    GetPedido oGetPedido = new GetPedido();
                    oGetPedido.Pedido = oPedido;

                    oPedidoProducto.Pedido = oGetPedido.PedidoList()[0];

                    //Producto
                    Producto oProducto = new Producto();
                    oProducto.IdProducto = Convert.ToInt32(r["idProducto"]);
                    GetProducto oGetProducto = new GetProducto();
                    oGetProducto.Producto = oProducto;
                    oPedidoProducto.Producto = oGetProducto.ProductoList()[0];

                    listaPedidoProducto.Add(oPedidoProducto);
                }
            }

            return listaPedidoProducto;
        }

        private DataSet _resultset;

        public DataSet Resultset
        {
            get { return _resultset; }
            set { _resultset = value; }
        }

        private PedidoProducto _pedidoProducto;

        public PedidoProducto PedidoProducto
        {
            get { return _pedidoProducto; }
            set { _pedidoProducto = value; }
        }
    
    }
}
